import os
import xlrd
import codecs

''' ====================================================='''
                        # 使用说明
'''
=====================================================
            使用说明：遍历一个文件夹里的所有文件，跟据 同级文件夹内的一个Excel 进行重命名
            程序放置位置：与 要遍历的 文件在同一级
	    version: 1.0
	    版本说明：
            author: XiaoTian
            date: 2014/10/11
	    记录信息：
=====================================================
'''

''' ====================================================='''




''' ====================================================='''
                        # init 初始值区域
''' ====================================================='''
# 读取EXCEL文件
EXCEL_NAME = "英语测试AX2_20140903语音稿-加了修改名字的.xlsx"
sheetNum = 1    #sheetNum 就是第几个表格。 0就是第1个表格，1是第2个表格。
ColNum = 3      #要找寻的 第几列
ColNewName0 = 8  #新名字0 在第几列
ColNewName1 = 2  #新名字1 在第几列


data = xlrd.open_workbook(EXCEL_NAME)
table = data.sheets()[sheetNum] 


''' ====================================================='''
                        # 函数定义区
''' ====================================================='''


''' =============================================================================='''
                #===========操作文件，路径 函数部分===========


'''返回 当前程序运行路径'''
def getRunPath():
    return os.getcwd()


'''对传入路径的 所有文件 进行重命名'''
def rename(path):
    fileNameList = createDict(path,1)
    
    global ColNum
    global ColNewName0
    global ColNewName1
    
    for i, item in enumerate(fileNameList):
        filename = removeSuffix(item)
        RowNum = searchbyname(filename,ColNum)
        if RowNum != None:  #说明在表格中找到了
            
            new0 = table.cell_value(RowNum,ColNewName0)   #第？列 为新名字前1部分
            if new0 == "":
                continue
            new0 = removeSpace( new0 )
            new1 = table.cell_value(RowNum,ColNewName1)   #第？列 为新名字前2部分
            new1 = removeSpace( new1 )
            fileSuffix = "." + item.split(".")[-1]  #获得原来文件的后缀名
            new_name = new0 + new1 + fileSuffix
            print (new_name)
            old_name = item
            os.rename(os.path.join(path,old_name),os.path.join(path,new_name))
            #print (new_name)


'''遍历当前文件夹所有文件， 把所有文件名字用List保存'''
def createDict(nowpath,root):
    pathList = os.listdir(nowpath)  #把路径下所有文件名存到 List 中【数组】
    fileNameList = []
    for i, item in enumerate(pathList):
        dirpath = os.path.join(nowpath, item)
        if isDir(dirpath):  #Folder     #遍历 子文件夹 的迭代功能，以后有空再加入吧
            tesssst = 1
            #root[item] = {}    
            #createDict(dirpath,root[item])
        else:               #File
            lastname = item                     #带文件类型后缀 的字符串
            #filename = removeSuffix(item)      #去掉文件类型后缀 的字符串
            fileNameList.append(lastname)       #L.append(var) 追加元素
    #print (fileNameList)
    return fileNameList     #返回一个 有文件名[含后缀] 的 List[数组] 



'''判断是否为目录'''
def isDir(path):
    if os.path.isdir(path):
        return True
    return False


''' =============================================================================='''
                #===========操作字符串 函数部分===========


'''去掉字符串中的头空格 和 尾空格,返回 的字符串 头尾第1个字符 都不是空格'''
def removeSpace(oldStr):
    newStr = removeStr(oldStr,0," ")
    newStr = removeStr(newStr,-1," ")
    return newStr

'''去掉字符串中的指定位置的指定字符，然后迭代这个结果，直到这个 指定位置的字符 ！= 指定字符 为止
 where 指定要去掉的 位置
 what 指定要去掉的 字符
'''
def removeStr(oldStr,where = 0,what = " "):
    newStr = oldStr
    if oldStr[where] == what:
        Suffix = oldStr[where:]
        newStr = oldStr[0:where] + Suffix[1:]
        newStr = removeStr(newStr)
    return newStr   


'''获取一个文件名，去掉扩展名
文件扩展名由最后一个 “.*"决定，如果不含“."则无类型，
比如这种文件名： aaa.log.txt
含有一个或多个“.",由最后一个“."后的字符串决定

'''
def removeSuffix(filename,strsplit = '.'):
    
    sStr2 = strsplit
    nPos = filename.find(sStr2)
    if nPos == -1:  #传进来的文件名里 没有 '.'
        return filename
    
    suffix = filename.split(sStr2)[-1] #最后一个'.'
    suffixNum = len(suffix) + 1
    filer = ""
    return filename[:-suffixNum]


''' =============================================================================='''
                #===========操作Excel 函数部分===========

'''从某个列中搜取特定的值,返回从哪一行找到的。MinRow-MaxRow 搜寻行的范围 '''
def searchbyname(SearchObject,WhichCol,MinRow=0,MaxRow=table.nrows):
    global table
    for i in range(MinRow,MaxRow):
        if SearchObject == table.cell_value(i,WhichCol):
            return i
    return None

''' 阶梯型的寻找一个值 '''
def fingPackage(Object1,Object2,WhichCol=0):
    ret1 = searchbyname(Object1,WhichCol)
    WhichCol += 1
    ret2 = searchbyname(Object2,WhichCol,ret1)
    WhichCol += 1
    ret3 = table.cell_value(ret2,WhichCol)
    return ret3

''' ====================================================='''


''' ====================================================='''
                        # 主程序区
''' ====================================================='''


path = getRunPath() #获取当前程序运行路径
rename(path)


# DO_8001_0002.ogg

'''
# 获取行数和列数
MaxRows = table.nrows
print (MaxRows) 
'''










